//
// Created by Jisam on 2024/6/30.
//

#include <bits/stdc++.h>

#define i64 long long
using namespace std;
const int N = 1e5 + 5;
int n;
int k = 0;
int p[N][10], vis[10], m[10];

void dfs(int tot, int i) {// tot 总数 i 层数
    if(i == 10&& tot == n){
        for (int j = 0; j < 10; j++) {
            p[k][j] = m[j];
        }
        k++;
        return ;
    }
    for (int j = 1; j <= 3; j++) {
        m[i] = j;
        if(tot + j > n) break;
        if((10 - i - 1) * 3 + j + tot < n) continue;
        if((10 - i - 1) + j  + tot > n ) break;
        dfs(tot + j, i + 1);
    }

}

int main() {
    scanf("%d",&n);
    dfs(0, 0);

    printf("%d\n",k);
    for (int i = 0; i < k; i++) {
        for (int j = 0; j < 10; j++) {
            printf("%d ",p[i][j]);
        }
        printf("\n");
    }

    return 0;
}